<?php

/**
 * @name SBShop
 * @author Mukharev Maxim
 * @version 0.1a
 *
 * @desription
 *
 * Электронный магазин для MODx
 *
 * Экшен сниппета электронного магазина: Вывод данных магазина в виде YML для Яндекс.Маркет
 *
 */

class yml_mode {

	public $aCategories; // массив категорий
	public $aProducts; // массив категорий

	/**
	 * Конструктор
	 */
	public function  __construct() {
		global $modx;
		/**
		 * Получаем шаблон
		 */
		$sTemplate = $modx->sbshop->getSnippetTemplate('yml');
		/**
		 * Разбиваем на набор
		 */
		list($sOuter,$sCategory,$sOffer,$sParam) = explode('<!-- ### -->',$sTemplate);
		/**
		 * Устанавливаем шаблоны
		 */
		$aTemplates['yml_outer'] = $sOuter;
		$aTemplates['yml_category'] = $sCategory;
		$aTemplates['yml_offer'] = $sOffer;
		$aTemplates['yml_param'] = $sParam;
		/**
		 * Формирование плейсхолдеров
		 */
		$aRepl = array(
			'[+sb.shop.name+]' => $modx->sbshop->config['shop_name'],
			'[+sb.shop.organization+]' => $modx->sbshop->config['organization'],
		);
		/**
		 * Получаем список всех категорий
		 */
		$oCategories = new SBCatTree(0, 10);
		/**
		 * Массив уровней
		 */
		$aCategories = $oCategories->getCategories();
		/**
		 * Список категорий
		 */
		$sCategories = '';
		/**
		 * Обрабатываем каждую категорию
		 */
		foreach ($aCategories as $oCategory) {
			/**
			 * Набор плейсхолдеров
			 */
			$aCatRepl = $modx->sbshop->arrayToPlaceholders($oCategory->getAttributes());
			/**
			 * Добавляем строку
			 */
			$sCategories .= str_replace(array_keys($aCatRepl), array_values($aCatRepl), $aTemplates['yml_category']);
		}
		/**
		 * Добавляем в список основных плейсхолдеров информацию о категориях
		 */
		$aRepl['[+sb.categories+]'] = $sCategories;
		/**
		 * Загружаем товары
		 */
		$oProducts = new SBProductList();
		$oProducts->loadAllList();
		$aProducts = $oProducts->getProductList();
		/**
		 * Переменная с готовыми товарами
		 */
		$sProducts = '';
		/**
		 * Обрабатываем каждый товар
		 */
		foreach ($aProducts as $oProduct) {
			/**
			 * Плейсхолдеры товара
			 */
			$aProdRepl = $modx->sbshop->arrayToPlaceholders($oProduct->getAttributes());
			/**
			 * Получаем список видимых характеристик товара
			 */
			$aParams = $oProduct->getExtendVisibleAttributes();
			/**
			 * Список параметров
			 */
			$sParams = '';
			/**
			 * Обрабатываем каждую характеристику
			 * XXX необходимо переделать задачу с мерами
			 */
			foreach ($aParams as $sKey => $sVal) {
				/**
				 * Выделяем из строки значение
				 */
				$iVal = floatval(str_replace(',','.',$sVal));
				/**
				 * Получаем меру
				 */
				$sUnit = str_replace(array(1,2,3,4,5,6,7,8,9,0,',','.',' '), '', $sVal);
				/**
				 * Плейсхолдер для товара
				 */
				$aProdRepl['[+sb.param.' . mb_strtolower($sKey,'UTF-8') . '+]'] = $sVal;
				/**
				 * Плейсхолдеры параметра
				 */
				$aParamRepl = array(
					'[+sb.title+]' => $sKey,
					'[+sb.unit+]' => $sUnit,
					'[+sb.value+]' => $iVal
				);
				/**
				 * Добавляем
				 */
				$sParams .= str_replace(array_keys($aParamRepl), array_values($aParamRepl), $aTemplates['yml_param']);
			}
			/**
			 * Добавляем параметры в плейсхолдеры товара
			 */
			$aProdRepl['[+sb.params+]'] = $sParams;
			/**
			 * Список скрытых параметров
			 */
			$aParams = $oProduct->getExtendHiddenAttributes();
			/**
			 * Обрабатываем каждый параметр
			 */
			foreach ($aParams as $sKey => $sVal) {
				/**
				 * Плейсхолдер параметра для товара
				 */
				$aProdRepl['[+sb.param.' . mb_strtolower($sKey,'UTF-8') . '+]'] = $sVal;
			}
			/**
			 * Добавляем изображения
			 */
			$aProdRepl = array_merge($aProdRepl,$modx->sbshop->multiarrayToPlaceholders($oProduct->getAllImages(),'num','sb.image.'));
			/**
			 * Добавляем товар
			 */
			$sProducts .= str_replace(array_keys($aProdRepl), array_values($aProdRepl), $aTemplates['yml_offer']);
		}
		/**
		 * Добавляем плейсхолдер с товарами
		 */
		$aRepl['[+sb.offers+]'] = $sProducts;
		/**
		 * Дата генерации YML
		 */
		$aRepl['[+sb.date+]'] = date('Y-m-d H:i');
		/**
		 * Подготавливаем к выводу
		 */
		$sOutput = str_replace(array_keys($aRepl), array_values($aRepl), $aTemplates['yml_outer']);
		/**
		 * Выводим
		 */
		echo $sOutput;
	}

}

?>
